package Managment;

import java.util.ArrayList;
import java.util.List;

import NegocioVO.MesaVO;
import bean.MesaBean;
import dao.MesaDao;


public class ManagmentMesa {
	

	private static ManagmentMesa instancia;
	
	public static ManagmentMesa getInstancia(){
		if(instancia == null)
			instancia = new ManagmentMesa();
		return instancia;
	}
	

	public List<MesaVO> listarMesasDisponibles (int LocalId)
	{
		MesaDao miDAO = new MesaDao();
		List<MesaVO> mesasVO = new ArrayList<MesaVO>();
		List<MesaBean> mesas = miDAO.listarMesasDisponibles(LocalId);
		for (int i = 0; mesas.size() - 1 >= i; i++)
		{
			mesasVO.add(this.HibernateAVo(mesas.get(i)));
		}
		return mesasVO;
	}


	public MesaVO HibernateAVo(MesaBean mesaBean) {
		MesaVO mesaVO = new MesaVO();
		mesaVO.setIdMesa(mesaBean.getIdMesa());
		mesaVO.setCantidad(mesaBean.getCantidad());
		mesaVO.setCantidadMax(mesaBean.getCantidadMax());
		mesaVO.setEstado(mesaBean.getEstado());
		return mesaVO;
	}
	
	private int BuscarMaxIdMesa(List<MesaBean> mesasAbiertas)
	{
		int max = 0;
		for (int i=0; i<mesasAbiertas.size(); i++)
		{
			if (mesasAbiertas.get(i).getIdMesa() > max)
			{
				max = mesasAbiertas.get(i).getIdMesa();
			}	
		}
		return max;
	}
	

	public void AbrirMesa(List<MesaBean> mesasAbiertas)
	{
		MesaDao miDao = new MesaDao();
		//Buscamos si las mesas son simples o combinadas
		int contador = 0;
		for (int i = 0; mesasAbiertas.size()- 1 >= i  ; i++)
		{
			contador++;
		}
	
		//Si el contador es menor a 2, es abrir una mesa simple
		if (contador < 2 )
		{
			for (int j = 0;mesasAbiertas.size()- 1 >= j  ; j++)
			{
				miDao.ocuparMesa(mesasAbiertas.get(j));	
			}
			
		}
	//	Si el contador es mayor a 2, es abrir una mesa combinada
			else
		{
				int mesaReferencia = this.BuscarMaxIdMesa(mesasAbiertas);
			
			for (int j = 0; mesasAbiertas.size()- 1 >= j; j++)
				{
					miDao.actualizarMesaCombinada(mesasAbiertas.get(j), mesaReferencia);
					miDao.ocuparMesa(mesasAbiertas.get(j));	
				}
			}
		
	}
		 
	 public MesaBean VoAHibernate(MesaVO mesaVo) {
		 
		 MesaBean mesa = new MesaBean();
		 mesa.setCantidad(mesaVo.getCantidad());
		 mesa.setCantidadMax(mesaVo.getCantidad());
		 mesa.setEstado(mesaVo.getEstado());
		 mesa.setIdMesa(mesaVo.getIdMesa());
		 mesa.setIdMesaCombinada(mesaVo.getIdMesaCombinada());
		 return mesa;
		 }
	
		
		public List<MesaBean> VoAHibernateLista (List<MesaVO> mesasVO)
		{
			List<MesaBean> mesas = new ArrayList<MesaBean>();
			for (int i = 0; mesasVO.size() - 1 >= i; i++)
			{
				mesas.add(this.VoAHibernate(mesasVO.get(i)));
			}
			return mesas;
		}
		
		public List<MesaVO> listarMesasOcupadas (int localId)
		{
			MesaDao miDAO = new MesaDao();
			List<MesaVO> mesasVO = new ArrayList<MesaVO>();
			List<MesaBean> mesas = miDAO.listarMesasOcupadas(localId);
			for (int i = 0; mesas.size() - 1 >= i; i++)
			{
				mesasVO.add(this.HibernateAVo(mesas.get(i)));
			}
			return mesasVO;
		}
		
		public MesaVO traemeMesa(Integer idMesa)
		{
			MesaDao miMesa = new MesaDao();
			MesaBean mb = miMesa.getMesa(idMesa);
			if (mb==null)
				return null;
			MesaVO mesaVO = this.HibernateAVo(mb);
			return mesaVO;
			
		}


		public void CerrarMesas(List<MesaBean> mesas) {
			MesaDao miDao = new MesaDao();
			boolean EsCombinada = false;
			for (int j = 0;mesas.size()- 1 >= j  ; j++)
			{
				System.out.println("Sera combinada o no");
				EsCombinada = miDao.EsMesaCombinada(mesas.get(j));
				System.out.println(EsCombinada);
				if (EsCombinada == true)
				{
					System.out.println("Fue Combinada");
					miDao.LiberarMesasCombinada(mesas.get(j));	
				}
				else
				{
					System.out.println("Fue Simple");
					miDao.LiberarMesasSimple(mesas.get(j));
				}
			}
			
		}	 
}
